home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cocktail / front.lha / front / src / WriteTok.mi < prev   
Text File  |  1992-08-18  |  2KB  |  90 lines

  1. (* generate output procedure for tokens *)
  2.  
  3. (* $Id: WriteTok.mi,v 2.1 1991/11/21 14:47:50 grosch rel $ *)
  4.  
  5. (* $Log: WriteTok.mi,v $
  6.  * Revision 2.1  1991/11/21  14:47:50  grosch
  7.  * new version of RCS on SPARC
  8.  *
  9.  * Revision 2.0  91/03/08  18:26:45  grosch
  10.  * turned tables into initialized arrays (in C)
  11.  * moved mapping tokens -> strings from Errors to Parser
  12.  * changed interface for source position
  13.  * 
  14.  * Revision 1.3  91/01/18  17:46:25  grosch
  15.  * calmed down lint
  16.  * 
  17.  * Revision 1.2  90/06/11  18:45:52  grosch
  18.  * layout improvements
  19.  * 
  20.  * Revision 1.1     89/01/12  17:45:56  vielsack
  21.  * supply source file name
  22.  * 
  23.  * Revision 1.0     88/10/04  14:27:30  vielsack
  24.  * Initial revision
  25.  * 
  26.  *)
  27.  
  28. IMPLEMENTATION MODULE WriteTok;
  29.  
  30. FROM IO        IMPORT WriteC, WriteI, WriteNl, WriteS, tFile;
  31. FROM Strings    IMPORT Length, Char, tString;
  32. FROM Idents    IMPORT GetString, tIdent, WriteIdent;
  33. FROM TokenTab    IMPORT MAXTerm, MINTerm, Terminal, TokenError, GetTokenType,
  34.             TokenType, TokenToSymbol;
  35.  
  36.   PROCEDURE GenWrTo (f : tFile);
  37.     VAR
  38.       t        : Terminal;
  39.       sym    : tIdent;
  40.       s        : tString;
  41.       error    : TokenError;
  42.       l        : CARDINAL;
  43.       del    : CHAR;
  44.     BEGIN
  45.       FOR t := MINTerm TO MAXTerm DO
  46.     IF GetTokenType (t) = Term THEN
  47.       sym := TokenToSymbol (t, error);
  48.       GetString (sym, s);
  49.       IF Language = Modula2 THEN
  50.         WriteS (f, '      | ');
  51.         WriteI (f, t, 0);
  52.         WriteS (f, ': Copy (');
  53.         del := Char (s, 1);
  54.         IF (del = '"') OR (del = "'") THEN
  55.           WriteIdent (f, sym);
  56.         ELSE
  57.           WriteC (f, '"');
  58.           WriteIdent (f, sym);
  59.           WriteC (f, '"');
  60.         END;
  61.         WriteS (f, ', Name);');
  62.         WriteNl (f);
  63.       ELSE (* Language = C *)
  64.         WriteS (f, '"');
  65.         IF (Char (s, 1) = '"') OR (Char (s, 1) = "'") THEN
  66.           FOR l := 2 TO Length (s) - 1 DO
  67.             IF (Char (s, l) = '\') OR (Char (s, l) = '"') THEN WriteC (f, '\'); END;
  68.             WriteC (f, Char (s, l));
  69.           END;
  70.         ELSE
  71.           FOR l := 1 TO Length (s) DO
  72.             IF (Char (s, l) = '\') OR (Char (s, l) = '"') THEN WriteC (f, '\'); END;
  73.             WriteC (f, Char (s, l));
  74.           END;
  75.         END;
  76.         WriteS (f, '",');
  77.         WriteNl (f);
  78.       END;
  79.     ELSIF Language = C THEN
  80.       WriteS (f, '0,');
  81.       WriteNl (f);
  82.     END;
  83.       END;
  84.     END GenWrTo;
  85.  
  86. BEGIN
  87.   Language := Modula2;
  88.   SourceFileName := ' ';
  89. END WriteTok.
  90.